package demo8

import "fmt"

/*
	多路复用——同时处理接收和发送多个通道的数据
		1. 多路复用是通信和网络中的一个专业术语。多路复用通常表示在一个信道上传输多路信号或数据流的过程和技术。
		2. Go语言中提供了 select 关键字，可以同时响应多个通道的操作。
			select 的用法与 switch 语句非常类似，由 select 开始一个新的选择块，每个选择条件由 case 语句来描述。
		3. 与 switch 语句可以选择任何可使用相等比较的条件相比，select 有比较多的限制，
			其中最大的一条限制就是每个 case 语句里必须是一个 IO 操作, 大致结构如下：
			select{
				case 操作1:
						响应操作1
				case 操作2:
						响应操作2
				…
				default:
						没有操作情况
			}
		4. select 不像 switch，后面并不带判断条件，而是直接去查看 case 语句。每个 case 语句都必须是一个面向 channel 的操作。
*/

// TestDemo810 多路复用——同时处理接收和发送多个通道的数据
func TestDemo810() {
	// 这个程序实现了一个随机向 ch 中写入一个 0 或者 1 的过程。当然，这是个死循环。
	ch := make(chan int, 1)
	for {
		select {
		case ch <- 0:
		case ch <- 1:
		}
		i := <-ch
		fmt.Println("Value received:", i)
	}

}
